﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using DataAccessLayer;
using System.Configuration;
using DTO;
using System.Data;

namespace DAL
{
    public class HinhThucGiaoHangDAL
    {
        private DBManager _dbmanager;

        #region Khởi tạo
        public HinhThucGiaoHangDAL()
        {
            string ConnectionInfo = ConfigurationManager.AppSettings["ConnectionInfo"];
            _dbmanager = new DBManager(DataProvider.SqlServer, ConnectionInfo);
        }
        #endregion

        #region Tạo Object từ DataReader
        private HinhThucGiaoHangDTO CreateHinhThuGiaoHangFromReader(IDataReader reader)
        {
            HinhThucGiaoHangDTO _htghDTO = new HinhThucGiaoHangDTO();
            _htghDTO.MaHinhThucGiaoHang = (int)reader["MaHinhThucGiaoHang"];
            _htghDTO.TenHinhThucGiaoHang = reader["TenHinhThucGiaoHang"].ToString();
            return _htghDTO;
        }
        #endregion

        #region GetListHinhThucGiaoHang
        public List<HinhThucGiaoHangDTO> GetListHinhThucGiaoHang()
        {
            List<HinhThucGiaoHangDTO> _lstHTGH = new List<HinhThucGiaoHangDTO>();
            IDataReader _reader = null;
            try
            {
                _dbmanager.Open();
                _reader = _dbmanager.ExecuteReader(CommandType.StoredProcedure, "usp_getListHinhThucGiaoHang");
                while (_reader.Read())
                {
                    HinhThucGiaoHangDTO htghDTO = new HinhThucGiaoHangDTO();
                    htghDTO = this.CreateHinhThuGiaoHangFromReader(_reader);
                    _lstHTGH.Add(htghDTO);
                }
            }
            catch (Exception ex)
            {

                throw new Exception(ex.Message);
            }
            finally
            {
                if (_reader != null)
                    _reader.Close();
                _dbmanager.Close();
            }

            return _lstHTGH;
        }
        #endregion

        #region Phương thức lấy thông tin 1 loại hình thức giao hàng dựa vào mã HTGH
        /// <summary>
        /// Phương thức lấy thông tin 1 loại hình thức giao hàng dựa vào mã HTGH
        /// </summary>
        /// <param name="mahttt"></param>
        /// <returns></returns>
        public HinhThucGiaoHangDTO GetHinhThucGiaoHang(int mahtgh)
        {
            HinhThucGiaoHangDTO _htgh = new HinhThucGiaoHangDTO();
            IDataReader _reader = null;
            try
            {
                _dbmanager.Open();
                _dbmanager.CreateParameters(1);
                _dbmanager.AddParameters(0, "@ma_htgh", mahtgh);
                _reader = _dbmanager.ExecuteReader(CommandType.StoredProcedure, "usp_getHinhThucGiaoHang");
                while (_reader.Read())
                    _htgh = this.CreateHinhThuGiaoHangFromReader(_reader);
                

            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            finally
            {
                if (_reader != null)
                    _reader.Close();
            }
            return _htgh;

        }
        #endregion

        #region Phương thức thêm 1 hình thức giao hàng
        /// <summary>
        /// Phương thức thêm 1 hình thức giao hàng
        /// </summary>
        /// <param name="httt"></param>
        /// <returns></returns>
        public int Them(HinhThucGiaoHangDTO htgh)
        {
            int _index = -1;
            try
            {
                // Mở kết nối
                _dbmanager.Open();

                // Thực thi câu truy vấn                
                _dbmanager.CreateParameters(1);
                _dbmanager.AddParameters(0, "@ten_htgh", htgh.TenHinhThucGiaoHang);                
                _index = _dbmanager.ExecuteNonQuery(CommandType.StoredProcedure, "usp_ThemHinhThucGiaoHang");
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            finally
            {
                if (_dbmanager.Connection.State == ConnectionState.Open)
                    _dbmanager.Close();
            }

            return _index;

        }

        #endregion

        #region Phương thức sửa thông tin 1 HTGH
        /// <summary>
        /// Phương thức sửa thông tin 1 HTGH
        /// </summary>
        /// <param name="httt"></param>
        /// <returns></returns>
        public int Sua(HinhThucGiaoHangDTO htgh)
        {
            int _index = -1;
            try
            {
                // Mở kết nối
                _dbmanager.Open();

                // Thực thi câu truy vấn                
                _dbmanager.CreateParameters(2);
                _dbmanager.AddParameters(0, "@ma_htgh", htgh.MaHinhThucGiaoHang);
                _dbmanager.AddParameters(1, "@ten_htgh", htgh.TenHinhThucGiaoHang);                
                _index = _dbmanager.ExecuteNonQuery(CommandType.StoredProcedure, "usp_CapNhatHinhThucGiaoHang");
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            finally
            {
                if (_dbmanager.Connection.State == ConnectionState.Open)
                    _dbmanager.Close();
            }

            return _index;

        }
        #endregion

        #region Phương thức xóa 1 HTGH
        /// <summary>
        /// Phương thức xóa 1 HTGH
        /// </summary>
        /// <param name="httt"></param>
        /// <returns></returns>
        public int Xoa(HinhThucGiaoHangDTO htgh)
        {
            int _index = -1;
            try
            {
                // Mở kết nối
                _dbmanager.Open();

                // Thực thi câu truy vấn
                _dbmanager.CreateParameters(1);
                _dbmanager.AddParameters(0, "@ma_htgh", htgh.MaHinhThucGiaoHang);
                _index = _dbmanager.ExecuteNonQuery(CommandType.StoredProcedure, "usp_XoaHinhThucGiaoHang");
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            finally
            {
                if (_dbmanager.Connection.State == ConnectionState.Open)
                    _dbmanager.Close();
            }
            return _index;

        }
        #endregion
    }
}